#!/bin/bash
# 金融数据平台停止脚本

# 定义颜色
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m' # 无颜色

echo -e "${BLUE}========================================================${NC}"
echo -e "${BLUE}               金融数据平台停止脚本                      ${NC}"
echo -e "${BLUE}========================================================${NC}"

# 检查PID文件
if [ ! -f ".pid" ]; then
    echo -e "${YELLOW}警告: 找不到.pid文件，服务可能未运行${NC}"
    
    # 尝试直接终止进程
    echo -e "${YELLOW}尝试停止所有相关进程...${NC}"
    
    # 停止Celery Worker和Beat
    pkill -f "celery -A modules.tasks.celery_app worker" || true
    pkill -f "celery -A modules.tasks.celery_app beat" || true
    
    # 停止Flower
    pkill -f "celery -A modules.tasks.celery_app flower" || true
    
    # 停止Web和API服务
    pkill -f "python -m modules.web.app" || true
    pkill -f "uvicorn modules.api.main:app" || true
    
    echo -e "${GREEN}所有相关进程已尝试终止${NC}"
    exit 0
fi

# 读取PID文件
read -r CELERY_WORKER_PID CELERY_BEAT_PID FLOWER_PID WEB_PID API_PID < .pid

# 停止API服务
if [ -n "$API_PID" ] && ps -p $API_PID > /dev/null; then
    echo -e "${YELLOW}停止API服务 (PID: $API_PID)...${NC}"
    kill $API_PID
    echo -e "${GREEN}API服务已停止${NC}"
else
    echo -e "${YELLOW}API服务未运行${NC}"
fi

# 停止Web服务
if [ -n "$WEB_PID" ] && ps -p $WEB_PID > /dev/null; then
    echo -e "${YELLOW}停止Web服务 (PID: $WEB_PID)...${NC}"
    kill $WEB_PID
    echo -e "${GREEN}Web服务已停止${NC}"
else
    echo -e "${YELLOW}Web服务未运行${NC}"
fi

# 停止Flower监控
if [ -n "$FLOWER_PID" ] && ps -p $FLOWER_PID > /dev/null; then
    echo -e "${YELLOW}停止Flower监控 (PID: $FLOWER_PID)...${NC}"
    kill $FLOWER_PID
    echo -e "${GREEN}Flower监控已停止${NC}"
else
    echo -e "${YELLOW}Flower监控未运行${NC}"
fi

# 停止Celery Beat
if [ -n "$CELERY_BEAT_PID" ] && ps -p $CELERY_BEAT_PID > /dev/null; then
    echo -e "${YELLOW}停止Celery Beat (PID: $CELERY_BEAT_PID)...${NC}"
    kill $CELERY_BEAT_PID
    echo -e "${GREEN}Celery Beat已停止${NC}"
else
    echo -e "${YELLOW}Celery Beat未运行${NC}"
fi

# 停止Celery Worker
if [ -n "$CELERY_WORKER_PID" ] && ps -p $CELERY_WORKER_PID > /dev/null; then
    echo -e "${YELLOW}停止Celery Worker (PID: $CELERY_WORKER_PID)...${NC}"
    kill $CELERY_WORKER_PID
    echo -e "${GREEN}Celery Worker已停止${NC}"
else
    echo -e "${YELLOW}Celery Worker未运行${NC}"
fi

# 删除PID文件
rm -f .pid

echo -e "${BLUE}========================================================${NC}"
echo -e "${GREEN}金融数据平台已成功停止!${NC}"
echo -e "${BLUE}========================================================${NC}"

# 确保进程完全停止
echo -e "${YELLOW}确认所有进程已停止...${NC}"
sleep 2

# 检查是否有遗留进程
REMAINING=$(pgrep -f "celery -A modules.tasks.celery_app\|python -m modules.web.app\|uvicorn modules.api.main:app")
if [ -n "$REMAINING" ]; then
    echo -e "${YELLOW}发现遗留进程，强制终止...${NC}"
    pkill -9 -f "celery -A modules.tasks.celery_app\|python -m modules.web.app\|uvicorn modules.api.main:app"
    echo -e "${GREEN}所有遗留进程已终止${NC}"
fi

# 提示可以重新启动服务
echo -e "${YELLOW}可以使用 ./start.sh 命令重新启动服务${NC}"